Amazon Connectを使ったCloudWatchアラームの電話通知で次の担当者への通知を番号入力で判定してみた

Amazon Connectを使ったCloudWatchアラームの電話通知で次の担当者への通知を番号入力で判定してみた

Clock Icon2024.10.31

こんにちは。
繁松です。

はじめに

前回のブログでAmazon Connectを使ったCloudWatchアラームの電話通知について紹介しました。
前回は1つの電話番号にのみ通知を行う設定でしたが、今回は電話通知の際に次の担当者へ通知するかを選択できる構成を考えてみました。
Lambdaとコンタクトフローだけで完結する内容になっています。

shapes-1730304787259

アラート発報の架電時に「次の担当者に通知する場合は1を入力してください。」と案内し、1を入力した場合はリストの次の担当者に電話通知を行います。
最後の担当者の場合には次の担当者への通知は案内せずに、アラート内容だけ通知し終了します。

やってみた

前提条件

  • Amazon Connect
    • 構築済みであること
    • 電話番号を取得済みであること

Amazon Connect

Amazon Connectコンタクトフローの作成

以下のようなフローを作成します。

2024-10-31_01h17_45

①コンタクト属性を確認するブロック

Lambdaから受け取ったisFinalContactの値がtrueかを判定しています。
Lambdaではリストの最後にある番号の場合はisFinalContact:trueを返しています。
2024-10-31_01h24_07

②顧客の入力を取得するブロック

CloudWatchアラーム名と次の担当者へ通知する場合は1を入力してくださいという案内を設定します。
オプションに1を設定し、1が入力された場合の分岐を設定します。

クラウドウォッチアラームの通知です。 $.Attributes.alarmName のアラームが発生しています。
次の担当者に通知する場合は1を入力してください。

2024-10-31_01h26_21

③AWS Lambda関数を呼び出すブロック

この時点ではLambdaの作成が完了していないので、関数のARNは空のまま保存してください。
関数入力パラメータは、次の担当者に通知する際に必要となるalarmNameとcurrentIndexを設定します。
2024-10-31_01h31_51

④プロンプトの再生ブロック

リストの最後にある番号の場合に分岐されるブロックです。
CloudWatchアラーム名の通知だけを読み上げるように設定します。

クラウドウォッチアラームの通知です。 $.Attributes.alarmName のアラームが発生しています。

2024-10-31_01h27_44

Lambda

Lambda関数の作成

Python 3.12でLambdaを作成します。

2024-10-29_23h52_32

ロールのポリシー追加

LambdaのロールにAmazon Connectの発信に必要な以下のポリシーを追加します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "connect:StartOutboundVoiceContact",
            "Resource": "*"
        }
    ]
}

CloudWatchアラーム用のポリシー追加

LambdaにCloudWatchのリソースベースポリシーを追加します。
Lambda→アクセス権限→リソースベースのポリシーステートメントで「アクセス権限を追加」を選択します。

以下の値を入力し保存します。

ステートメントID:任意の値
プリンシパル:lambda.alarms.cloudwatch.amazonaws.com
アクション:lambda:InvokeFunction

2024-10-30_00h29_11

コード

Amazon ConnectのインスタンスID、コンタクトフローID、Amazon Connectで取得した電話番号、通知先の電話番号を設定します。
電話番号は「E.164」形式(例:+815011111111)を設定する必要があります。
今回「EC2_CPU使用率80%超過」というアラート名を読み上げて通知したいのですが、EC2を「イーシー二」と呼んでしまうのでコードの中で「イーシーツー」に変換しています。

import json
import boto3

def lambda_handler(event, context):
    connect = boto3.client('connect')

    instance_id = 'Amazon ConnectインスタンスID'
    contact_flow_id = 'コンタクトフローID'
    source_phone_number = 'Amazon Connectで取得した電話番号'

    # 担当者リスト(順番に呼び出す)
    phone_numbers = ['通知先の電話番号1', '通知先の電話番号2', '通知先の電話番号3']

    # イベントから現在の担当者のインデックスを取得
    current_index = int(event.get('Details', {}).get('Parameters', {}).get('currentIndex', 0))

    # アラーム名を取得
    if 'alarmData' in event:
        alarmName = event['alarmData']['alarmName']
        alarmName_replace = alarmName.replace("EC2", "イーシーツー")
    else:
        alarmName_replace = event['Details']['Parameters'].get('alarmName', '')

    # リストの最後の番号か判定
    is_final_contact = 'true' if current_index == len(phone_numbers) - 1 else 'false'

    # 担当者に電話をかける
    destination_phone_number = phone_numbers[current_index]

    response = connect.start_outbound_voice_contact(
        DestinationPhoneNumber=destination_phone_number,
        ContactFlowId=contact_flow_id,
        InstanceId=instance_id,
        SourcePhoneNumber=source_phone_number,
        Attributes={
            'alarmName': alarmName_replace,
            'currentIndex': str(current_index + 1),  # 次の担当者のインデックス
            'isFinalContact': is_final_contact
        }
    )

通知先の電話番号を携帯電話宛(070,080,090)に設定したい場合はAWSサポートへの申請が必要になります。

https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/country-code-allow-list.html

Amazon Connect

Lambda関数の追加

作成したLambda関数をAmazon Connectに追加します。
AWSコンソール→Amazon Connect(対象のインスタンス)→問い合わせフローを開きます。
AWS Lambdaの項目で作成したLambda関数を選択し「+Add Lambda Function」を選択します。
2024-10-31_01h35_01

コンタクトフローのLambdaブロックに設定

先ほどの手順で関数のARNを空で保存した「AWS Lambda関数を呼び出す」ブロックを開き、追加したLambda関数を設定します。
2024-10-31_01h27_14

CloudWatch

CloudWatch Alarmの作成

EC2のCPU使用率が80%を超えた場合のアクションに電話通知用のLambdaを設定してみます。

2024-10-30_00h12_48
2024-10-30_00h13_16

Lambdaアクションに先ほど作成した関数を設定します。

2024-10-30_00h14_52

アラーム名に「EC2_CPU使用率80%超過」を設定します。
2024-10-30_00h16_22

動作確認

動作確認のためAmazon Connect宛に電話通知を行いました。
動画では頭の方の音声が途切れていますが、携帯宛の通知ではちゃんと「EC2 CPU使用率超過のアラームが発生しています。」と設定した内容が聞こえています。

https://www.youtube.com/watch?v=ollK-gwWrmQ

さいごに

Amazon ConnectとLambdaを使用して、複数の担当者に順番に通知を行う方法を紹介しました。
今回はリストの次の担当者に通知を飛ばすように設定しましたが、決められた番号の担当者に通知を飛ばすような設定も可能です。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.